home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / hard / drivr / ScanTek4_4.lha / ScanTek / ScanTek-Install < prev    next >
Text File  |  1999-02-03  |  16KB  |  690 lines

  1. ;------------------------------------------------------------------------
  2. ;
  3. ; This is the ScanTek Installer Script
  4. ;
  5. ; $VER: ScanTek-Install 1.4 (03.02.99) Waldemar Zöhner
  6. ;
  7. ; Copyright © Waldemar Zöhner 1998/99
  8. ; Inspired by the Surfer-Install Script provided with the Installer
  9. ; Archive.
  10. ;
  11. ; This ScanTek install script is localized for English and German 
  12. ; Dieses ScanTek Installationsskript ist für Englisch und Deutsch
  13. ; ausgelegt.
  14. ;------------------------------------------------------------------------
  15.  
  16. ; Always clean up (A not so famous chinese verse)
  17. ;
  18. (onerror (P_CleanUp))
  19.  
  20. ;------------------------------------------------------------------------
  21. (user 1); starting user level
  22. (set #scantekversion "ScanTek 4.4")
  23. (set #scantekdestdir "RAM:")
  24. (set #scantekdirname "ScanTek")
  25. (set #scantekkeyname "ScanTek.key")
  26. (set #cpuopt_dir "CPUopt")
  27. (set cpu (database "cpu"))
  28. (set #cpu 0) ; the default
  29. (if (= cpu 68010) (set #cpu 1)) (if (= cpu 68020) (set #cpu 2))
  30. (if (= cpu 68030) (set #cpu 3)) (if (= cpu 68040) (set #cpu 4))
  31. (if (= cpu 68060) (set #cpu 5))
  32. (set #copykeyfile 0)
  33. ;available catalogs
  34. (set #engcat_str "english")
  35. (set #deucat_str "deutsch")
  36. (set #dancat_str "dansk")
  37.  
  38.  
  39. ;available documents
  40. (set #engdoc_str "ScanEnglish.guide")
  41. (set #deudoc_str "ScanDeutsch.guide")
  42.  
  43.  
  44.  
  45. ;-------- English --------
  46. ;this is the default for all installations
  47. (set #catalog-mask 0)
  48. (set #doc-mask 1)
  49.  
  50.  
  51. (set #reginfo-prompt
  52. (cat "\nA ScanTek keyfile was found\n\n"
  53.      "Take care about the commitments you have made:\n\n"
  54.      "You have read the section 'Copyrights' in the manual and have\n"
  55.      "agreed with the conditions. Specifically, with your signature,\n"
  56.      "you have committed on installing the keyfile only on one\n"
  57.      "computer and not giving it to others.\n\n"
  58.      "I accept the commitments.\n"
  59. ))
  60.  
  61. (set #reginfo-help
  62. (cat "Please check if you can confirm the required commitments. "
  63.      "If you can´t confirm then you are not allowed to install and "
  64.      "use the personalized keyfile."
  65. ))
  66.  
  67.  
  68. (set #wrongversion
  69. (cat "Caution! You have an old version of the program 'Installer' "
  70.      "on your Amiga!\n\nThe installation script may lead to a incomplete installation.\n"
  71.      "Please, upgrade the Installer to version 42.9 or higher."
  72. ))
  73.  
  74. (set #welcome1
  75. (cat ("%s\n" #scantekversion)
  76.      "The scanner driver for Microtek, Highscreen and Mustek Flatbed Scanner\n"
  77.      "© Copyright 1995/96/97/98 Waldemar Zöhner"
  78. ))
  79.  
  80. (set #welcome
  81. (cat "Welcome to the Installation of\n"
  82.      #welcome1
  83. ))
  84.  
  85. (set #install_init "Preparing Installation.")
  86.  
  87. (set #scantekdestdir-prompt "\nPlease select the drawer where the drawer 'ScanTek' should be created.\n")
  88. (set #scantekdestdir-help "Typically, 'Work:' is selected as destination.")
  89.  
  90. (set #filedirclash
  91. (cat "Installation error!\nYou have choosen the path to a file.\n"
  92.      "It cannot be used as the Scantek directory!\n"
  93.      "Please restart the installation in a different directory."
  94. ))
  95.  
  96. (set #cleanupstr "Performing CleanUp")
  97.  
  98. (set #askcpu-prompt
  99. (cat "\nCPU Verification:\nWhat CPU does the machine use that you are installing ScanTek on?\n"
  100.      "The installer assumes:\n"
  101. ))
  102.  
  103. (set #askcpu-help
  104. (cat "Here you have the opportunity to select a CPU specific "
  105.      "ScanTek program version.\n\nCaution:\n"
  106.      "If you choose a CPU that is higher than the available one "
  107.      "than this leads to a system crash."
  108. ))
  109.  
  110. (set #askcatalog-prompt
  111. (cat "\nWhich languages should be installed for ScanTek?\n"
  112.      "You can choose more than one language.\n"
  113. ))
  114.  
  115. (set #askcatalog-help
  116. (cat "You can choose different languages. The actual used language "
  117.      "is determined during startup of Scantek out of your LOCALE settings."
  118. ))
  119.  
  120. (set #askdoc-prompt
  121. (cat "\nWhich documents (guide files) should be installed?\n"
  122.      "You can choose more than one document.\n"
  123. ))
  124.  
  125. (set #askdoc-help
  126. (cat "You can choose different documents. As a rule of thumb you need only "
  127.      "one."
  128. ))
  129.  
  130. (set #cheers
  131. (cat "\n\n\nInstallation complete. Have much fun with\n"
  132.      #welcome1
  133. ))
  134.  
  135.  
  136. ;-------- Deutsch --------
  137.  
  138. (if (= @language "deutsch")
  139. (
  140. (set #catalog-mask 1)
  141. (set #doc-mask 2)
  142.  
  143. (set #wrongversion
  144. (cat "Achtung! Sie benutzen eine alte Version des Programmes 'Installer' "
  145.      "auf Ihrem Amiga!\n\nEine erfolgreiche Installation ist nicht gewährleistet.\n"
  146.      "Bitte erweitern Sie Ihre Konfiguration auf Installer 42.9. oder besser\n\n"
  147. ))
  148.  
  149. (set #reginfo-prompt
  150. (cat "\nEs wurde ein ScanTek Keyfile entdeckt\n\n"
  151.      "Bitte beachten Sie Ihre eingegangene Verpflichtung:\n\n"
  152.      "Sie haben in der Scantek Anleitung den Abschnitt 'Copyrights' gelesen\n"
  153.      "und akzeptieren die Bedingungen. Insbesondere haben Sie sich mit Ihrer\n"
  154.      "Unterschrift dazu verpflichtet, das personalisierte Keyfile nur auf einem\n"
  155.      "Rechner zu installieren und nicht an andere weiterzugeben.\n"
  156.      "\nIch akzeptiere die Bedingungen\n"
  157. ))
  158.  
  159. (set #reginfo-help
  160. (cat "Prüfen Sie ob Sie die geforderten Verpflichtungen erfüllen und damit "
  161.      "einverstanden sind. Wenn dies nicht der Fall ist, dann müssen Sie "
  162.      "die Installation des personifizierten Keyfiles ablehnen."
  163. ))
  164.  
  165.  
  166. (set #welcome1
  167. (cat ("%s\n" #scantekversion)
  168.      "Der Scanner Treiber für Microtek, Highscreen und Mustek Flachbett Scanner\n"
  169.      "© Copyright 1995/96/97/98 Waldemar Zöhner"
  170. ))
  171.  
  172. (set #welcome
  173. (cat "Willkommen zur Installation von\n"
  174.      #welcome1
  175. ))
  176.  
  177. (set #install_init "Bereite Installation vor.")
  178.  
  179. (set #scantekdestdir-prompt "\nBitte geben Sie die Schublade an, in der die Schublade 'ScanTek' angelegt werden soll.\n")
  180. (set #scantekdestdir-help "Üblicherweise wird ScanTek nach 'Work:' installiert.")
  181.  
  182. (set #filedirclash
  183. (cat "\nInstallation Fehler!\nSie habe den Pfad auf eine Datei gewählt.\n"
  184.      "Darum kann die Schublade ScanTek nicht erstellt werden.\n"
  185.      "Bitte die Installation in einer anderen Schublade noch einmal durchführen"
  186. ))
  187.  
  188. (set #cleanupstr "\nBeseitige die Installationshilfen")
  189. (set #askcpu-prompt
  190. (cat "\nCPU Prüfung:\n"
  191.      "Welche CPU steuert den Rechner auf dem Sie ScanTek installieren wollen?\n"
  192.      "Der Installer hat den folgenden Typ erkannt:\n"
  193. ))
  194.  
  195. (set #askcpu-help
  196. (cat "Hier habe Sie die Möglichkeit abhängig von Ihrem verwendeten "
  197.      "Prozessor ein bestimmte optimierte ScanTek Programmvariante"
  198.      "zu wählen.\n\nAchtung\n"
  199.      "Wählen Sie hier einen Prozessor mit einer höheren Version "
  200.      "als Sie tatsächlich besitzen, dann wird dies unweigerlich zum "
  201.      "Absturz ihres Rechners bei der Ausführung von ScanTek führen."
  202. ))
  203.  
  204. (set #askcatalog-prompt
  205. (cat "\nWelche Sprachen sollen für ScanTek installiert werden\n"
  206.      "Es können mehrere Sprachen angewählt werden.\n"
  207. ))
  208.  
  209. (set #askcatalog-help
  210. (cat "Hier können Sie verschiedene Sprachen anwählen. Die tatsächlich "
  211.      "benutzte Sprache wird während des Hochfahrens von ScanTek aus den "
  212.      "LOCALE Einstellungen ermittelt.\n"
  213. ))
  214.  
  215.  
  216. (set #askdoc-prompt
  217. (cat "\nWelche Dokumentationen (Guidedateien) sollen installiert werden?\n"
  218.      "Es können mehrere angewählt werden.\n"
  219. ))
  220.  
  221. (set #askdoc-help
  222. (cat "Hier können Sie verschiedene Dokumentationen anwählen. Normalerweise "
  223.      "reicht es aus, wenn Sie nur eine Dokumentation wählen."
  224. ))
  225.  
  226. (set #cheers 
  227. (cat "\n\n\nInstallation abgeschlossen. Viel Spaß mit\n" 
  228.      #welcome1
  229. ))
  230. )
  231. ) ; if
  232.  
  233.  
  234. ;-------- Dansk --------
  235.  
  236. (if (= @language "dansk")
  237. (
  238. (set #catalog-mask 2)
  239. (set #doc-mask 1)
  240.  
  241.  
  242. (set #reginfo-prompt
  243. (cat "\nEn ScanTek keyfile blev fundet\n\n"
  244.      "Vær forsigtig med de forpligtelser du har gjort dig:\n\n"
  245.      "Du har læst afsnittet 'Copyrights' i manualen og er indforstået\n"
  246.      "med betingelserne. Helt bestemt har du, med din underskrift,\n"
  247.      "forpliget dig til kun at installere keyfilen på én computer,\n"
  248.      "og ikke give den til andre.\n\n"
  249.      "Jeg accepterer forpligtelserne.\n"
  250. ))
  251.  
  252. (set #reginfo-help
  253. (cat "Bekræft venligst om du kan stå inde for de krævede betingelser. "
  254.      "Hvis du ikke kan stå inde for dem, så har du ikke lov til at "
  255.      "installere og bruge den personlige keyfile."
  256. ))
  257.  
  258.  
  259. (set #wrongversion
  260. (cat "Advarsel! Du har en gammel version af programmet 'Installer' "
  261.      "på din Amiga!\n\nInstallationsskriptet kan føre til en "
  262.      "inkorrekt installation.\n"
  263.      "Opgradér venligst 'Installer' til version 42.9 eller højere."
  264. ))
  265.  
  266. (set #welcome1
  267. (cat ("%s\n" #scantekversion)
  268.      "Scanner driver til Microtek, Highscreen og Mustek Flatbed Scannere\n"
  269.      "© Copyright 1995/96/97/98 Waldemar Zöhner"
  270. ))
  271.  
  272. (set #welcome
  273. (cat "Velkommen til installationen af\n"
  274.      #welcome1
  275. ))
  276.  
  277. (set #install_init "Klargører Installation.")
  278.  
  279. (set #scantekdestdir-prompt "\nVælg venligst en skuffe, hvor skuffen 'ScanTek' skal oprettes.\n")
  280. (set #scantekdestdir-help "Typisk er 'Work:' valgt som destination.")
  281.  
  282. (set #filedirclash
  283. (cat "Installationsfejl!\nDu har valgt stien til en fil.\n"
  284.      "Den kan ikke benyttes som Scantek skuffe!\n"
  285.      "Genstart venligst installationen i en anden skuffe."
  286. ))
  287.  
  288. (set #cleanupstr "Udfører Oprydning")
  289.  
  290. (set #askcpu-prompt
  291. (cat "\nCPU Verificering:\nHvilken CPU har maskinen, du installerer ScanTek på?\n"
  292.      "Installationsprogrammet formoder:\n"
  293. ))
  294.  
  295. (set #askcpu-help
  296. (cat "Her har du mulighed for at vælge en CPU specifik udgave, "
  297.      "af ScanTek programmet.\n\nAdvarsel:\n"
  298.      "Hvis du vælger en CPU som er højere, end den der er tilgængelig, "
  299.      "vil det lede til et system nedbrud."
  300. ))
  301.  
  302. (set #askcatalog-prompt
  303. (cat "\nHvilke(t) sprog ønsker du at installere til ScanTek?\n"
  304.      "Du kan godt vælge mere end ét sprog.\n"
  305. ))
  306.  
  307. (set #askcatalog-help
  308. (cat "Du kan vælge forskellige sprog. Det benyttede sprog bliver "
  309.      "valgt under opstart af Scantek ud fra dine LOCALE indstillinger."
  310. ))
  311.  
  312. (set #askdoc-prompt
  313. (cat "\nHvilke(t) dokument(er) (guide filer) ønsker du at installere?\n"
  314.      "Du kan godt vælge mere en ét dokument.\n"
  315. ))
  316.  
  317. (set #askdoc-help
  318. (cat "Du kan vælge forskellige dokumenter. Som hovedregel har du kun "
  319.      "brug for ét."
  320. ))
  321.  
  322. (set #cheers
  323. (cat "\n\n\nInstallationen er færdig. Mor dig godt med\n"
  324.      #welcome1
  325. ))
  326. )
  327. )
  328.  
  329.  
  330. ;------------------------------------------------------------------------
  331. ; Cleanup any temporary mess we created
  332. (procedure P_CleanUp
  333.     ; Nothing to cleanup
  334.     (message #cleanupstr)
  335.  
  336.     ;(delete (tackon @default-dest ".tempinstall") (all) (optional "force"))
  337. ) ; P_CleanUp
  338.  
  339.  
  340. ;------------------------------------------------------------------------
  341. (procedure P_CopyDirLib
  342. ; #PCL_srcfiledir
  343. ; #PCL_destdir
  344. ;
  345.   ; its a directory
  346.   (makedir (tackon #PCL_destdir #PCL_srcfiledir))
  347.  
  348.   (foreach #PCL_srcfiledir "#?"
  349.     (
  350.       (if (> 0 @each-type)
  351.         (
  352.           ;this is a file
  353.   
  354.           (copylib
  355.               (source (tackon #PCL_srcfiledir @each-name))
  356.               (dest   (tackon #PCL_destdir #PCL_srcfiledir))
  357.               (optional "force" "askuser")
  358.           )
  359.         )
  360.       )
  361.     )
  362.   )
  363. )
  364.  
  365.  
  366. ;------------------------------------------------------------------------
  367. (procedure P_CopyFileLib
  368. ; #PCL_srcfiledir
  369. ; #PCL_destdir
  370. ;
  371.   ; its a file
  372.  
  373.   (copylib
  374.       (source #PCL_srcfiledir)
  375.       (dest   #PCL_destdir)
  376.         (infos)
  377.       (optional "force" "askuser")
  378.   )
  379. )
  380.  
  381.  
  382. ;------------------------------------------------------------------------
  383. (procedure P_CopyFileNewLib
  384. ; #PCL_srcfiledir
  385. ; #PCL_destdir
  386. ; #PCL_destfile
  387. ;
  388.   ; its a file
  389.  
  390.   (copylib
  391.       (source #PCL_srcfiledir)
  392.       (dest   #PCL_destdir)
  393.         (infos)
  394.       (newname #PCL_destfile)
  395.       (optional "force" "askuser")
  396.   )
  397. )
  398.  
  399.  
  400. ;------------------------------------------------------------------------
  401. (procedure P_CopyDir
  402. ; #PCL_srcfiledir
  403. ; #PCL_destdir
  404. ;
  405.   ; its a directory
  406.   (makedir (tackon #PCL_destdir #PCL_srcfiledir))
  407.   
  408.   (copyfiles
  409.       (source #PCL_srcfiledir)
  410.       (dest   (tackon #PCL_destdir #PCL_srcfiledir))
  411.       (all)
  412.       (optional "force" "askuser")
  413.   )
  414. )
  415.  
  416.  
  417. ;------------------------------------------------------------------------
  418. (procedure P_CopyFile
  419. ; #PCL_srcfiledir
  420. ; #PCL_destdir
  421. ;
  422.  
  423.   (copyfiles
  424.       (source #PCL_srcfiledir)
  425.       (dest   #PCL_destdir)
  426.         (infos)
  427.       (optional "force" "askuser")
  428.   )
  429. )
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439. ;------------------------------------------------------------------------
  440. ; Installer 42.9 or better prefered
  441. (if (< @installer-version 2752521)
  442.   (
  443.     ; Notify user about the old version
  444.     (message #wrongversion)
  445.   )
  446. )
  447.  
  448. ; find out how the user wants to install things
  449. (welcome #welcome)
  450.  
  451.  
  452. (complete 0)
  453.  
  454.  
  455. (working #install_init)
  456.  
  457.  
  458. (complete 4)
  459.  
  460.  
  461. (set #scantekdir
  462.   (tackon 
  463.     (expandpath
  464.       (askdir
  465.         (prompt #scantekdestdir-prompt)
  466.         (help #scantekdestdir-help)
  467.         (default @default-dest)
  468. ;        (default #scantekdestdir)
  469.       )
  470.     )
  471.     #scantekdirname
  472.   )
  473. )
  474.  
  475.  
  476. (complete 10)
  477.  
  478.  
  479. (if (= 1 (exists #scantekdir))
  480. ;abort the current installation,
  481. ;because there exists a file with our prefered name
  482.   (  (P_CleanUp)
  483.      (abort (#filedirclash #scantekdir))
  484.   )
  485. )
  486.  
  487.  
  488. (complete 12)
  489.  
  490. ; not available yet
  491. ;(set #cpuchoice
  492. ;    (askchoice (choices "68000" "68010" "68020" "68030" "68040" "68060")
  493. ;             (prompt  #askcpu-prompt)
  494. ;       (help    #askcpu-help)
  495. ;            (default #cpu)
  496. ;      )
  497. ;)
  498. ;
  499.  
  500. (complete 17)
  501.  
  502.  
  503. (set #catalogchoice-mask
  504.   (askoptions
  505.     (choices #deucat_str #dancat_str)
  506.       (prompt  #askcatalog-prompt)
  507.         (help    #askcatalog-help)
  508.       (default #catalog-mask)
  509.   )
  510. )
  511.  
  512.  
  513. (complete 22)
  514.  
  515.  
  516. ;choose the documentation
  517. (set #docchoice-mask
  518.   (askoptions
  519.     (choices #engdoc_str #deudoc_str)
  520.       (prompt  #askdoc-prompt)
  521.         (help    #askdoc-help)
  522.       (default #doc-mask)
  523.   )
  524. )
  525.  
  526.  
  527.  
  528. (if (= 1 (exists #scantekkeyname))
  529.   (
  530.     set #copykeyfile (askbool (prompt #reginfo-prompt) (help #reginfo-help) (default 1))
  531.   )
  532. )
  533.  
  534.  
  535. (complete 27)
  536.  
  537.  
  538. ; create directory whether it exists or not
  539. (makedir #scantekdir (infos))
  540.  
  541.  
  542. (set @default-dest #scantekdir)
  543.  
  544.  
  545. (complete 30)
  546.  
  547.  
  548. (set #PCL_destdir    #scantekdir);
  549.  
  550. (set #counter 0)
  551. (while (> 1 #counter)
  552.   (
  553.     (set #PCL_srcfiledir (select #counter "Rexx"))
  554.     (set #PCL_destdir    #scantekdir);
  555.     (P_CopyDirLib)
  556.  
  557.     (set #counter (+ #counter 1))
  558.   )
  559. )
  560.  
  561.  
  562. (complete 40)
  563.  
  564. ; not available yet
  565. ;(set #PCL_srcfiledir (select #cpuchoice "ScanTek" "ScanTek" "ScanTek_68020" "ScanTek_68030" "ScanTek_68040" "ScanTek_68060"))
  566. ;(if (> #cpuchoice 1)
  567. ;  (
  568. ;    (set #PCL_srcfiledir (tackon #cpuopt_dir #PCL_srcfiledir))
  569. ;  )
  570. ;)
  571.  
  572. (set #PCL_srcfiledir "ScanTek")
  573.  
  574. (set #PCL_destfile "ScanTek")
  575. (set #PCL_destdir  #scantekdir)
  576. (P_CopyFileNewLib)
  577.  
  578.  
  579.  
  580. (complete 50)
  581.  
  582.  
  583. (set #counter 0)
  584. (while (> 3 #counter)
  585.   (
  586.     (set #PCL_srcfiledir (select #counter "Images" "Temp" "Gamma"))
  587.     (set #PCL_destdir    #scantekdir);
  588.     (P_CopyDir)
  589.  
  590.     (set #counter (+ #counter 1))
  591.   )
  592. )
  593.  
  594.  
  595. (complete 60)
  596.  
  597.  
  598. (set #counter 0)
  599. (while (> 4 #counter)
  600.   (
  601.     (set #PCL_srcfiledir (select #counter "Orderform" "Bestellformular" "ReadMe" "LiesMich"))
  602.     (set #PCL_destdir    #scantekdir);
  603.     (P_CopyFile)
  604.  
  605.     (set #counter (+ #counter 1))
  606.   )
  607. )
  608.  
  609.  
  610. (complete 70)
  611.  
  612.  
  613. (makedir (tackon #scantekdir "Documents"))
  614.  
  615. (set #counter 0)
  616. (while (> 2 #counter)
  617.   (
  618.     (set #PCL_srcfiledir (tackon "Documents" (select #counter #engdoc_str #deudoc_str)))
  619.     (set #PCL_destdir    (tackon #scantekdir "Documents"))
  620.  
  621.     (if (IN #docchoice-mask #counter)
  622.       (
  623.         (P_CopyFileLib)
  624.       )
  625.     )
  626.     (set #counter (+ #counter 1))
  627.   )
  628. )
  629.  
  630.  
  631. (complete 80)
  632.  
  633.  
  634. (makedir (tackon #scantekdir "Catalogs"))
  635.  
  636. (set #counter 0)
  637. (while (> 2 #counter)
  638.   (
  639.     (set #cat_path (tackon "Catalogs" (select #counter #deucat_str #dancat_str)))
  640.     (set #PCL_srcfiledir #cat_path)
  641.     (set #PCL_destdir    (tackon #scantekdir #cat_path))
  642.  
  643.     (if (IN #catalogchoice-mask #counter)
  644.       (
  645.         (makedir #PCL_srcfiledir)
  646.         (set #PCL_srcfiledir (tackon #PCL_srcfiledir "ScanTek.catalog"))
  647.         (P_CopyFileLib)
  648.       )
  649.     )
  650.     (set #counter (+ #counter 1))
  651.   )
  652. )
  653.  
  654.  
  655. (complete 90)
  656.  
  657.  
  658. (set #counter 0)
  659. (while (> 4 #counter)
  660.   (
  661.     (set #PCL_srcfiledir (select #counter "Images.info" "Documents.info" "Gamma.info" "Rexx.info" "Catalogs.info"))
  662.     (set #PCL_destdir    #scantekdir)
  663.     (P_CopyFile)
  664.  
  665.     (set #counter (+ #counter 1))
  666.   )
  667. )
  668.  
  669.  
  670. (complete 95)
  671.  
  672. (if (= 1 #copykeyfile)
  673.   (
  674.     (set #PCL_srcfiledir #scantekkeyname)
  675.     (set #PCL_destdir    #scantekdir)
  676.     (P_CopyFile)
  677.   )
  678. )
  679.  
  680. (complete 99)
  681.  
  682.  
  683. ; remove the temporarily need executables
  684.  
  685.  
  686. (complete 100)
  687.  
  688.  
  689. (exit #cheers)
  690.